import requests
import json
import time
import random
import sys


class FishPiBot:
    def __init__(self):
        self.cookie = ''
        self.messages = [
            '有没有人处大象啊,我有五十块可以分你二十五...毛!',
            '爱得深也是一种错吗?',
            '怎么就星期四了!!!!',
            '好奇大家都发工资没?!',
            '点歌 去时风',
            '早上晚上一共吃5块,两个馒头,两个烧麦',
            '今天好冷哦,记得多穿点,困了就睡,饿了就吃哦,对自己好点哈',
            '谁跟谈一场不分手的恋爱呀,我们一起听歌,看雪,吃饭好不好嘛',
            '注意注意,过年回家记得发私信给我哈,当然有红包就更好了',
            '家人们,我发现自己的每日生活费上涨了一元,请帮我上报联合国谢谢!',
            '什么考试都去spa我要回家做我的梦想',
            '点歌 雨后的黄昏是悲伤的',
        ]
        self.used_messages = []  # 记录已使用的消息
        self.message_pool = self.messages.copy()  # 消息池

    def get_random_message(self):
        """从消息数组中随机选择一条，避免重复"""
        if not self.message_pool:
            # 如果消息池空了，重新填充
            self.message_pool = self.messages.copy()
            print("[提示] 消息池已重置，可能开始重复消息")

        message = random.choice(self.message_pool)
        self.message_pool.remove(message)  # 从池中移除已选消息
        self.used_messages.append(message)  # 记录已使用消息

        return message

    def send_message(self, message):
        """发送单条消息到FishPi聊天室"""
        session = requests.Session()
        session.headers.update({
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
            'Content-Type': 'application/json; charset=UTF-8',
            'Referer': 'https://fishpi.cn/cr',
            'Origin': 'https://fishpi.cn',
            'Cookie': self.cookie
        })

        url = "https://fishpi.cn/chat-room/send"
        json_data = {
            "content": message,
            "client": "Web/PC网页端"
        }

        try:
            response = session.post(url, json=json_data, timeout=10)
            if response.status_code == 200:
                result = response.json()
                if result.get('code') == 0:
                    print(f"✓ 消息发送成功: {message}")
                    return True
                else:
                    print(f"✗ 发送失败: {result.get('msg', '未知错误')}")
                    return False
            else:
                print(f"✗ 请求失败，状态码: {response.status_code}")
                return False
        except Exception as e:
            print(f"✗ 发送异常: {e}")
            return False

    def run(self, count=10):
        """运行程序"""
        sent_count = 0

        print(f"开始运行消息发送程序，计划发送 {count} 次，每分钟一次...")
        print(f"消息库共有 {len(self.messages)} 条消息")
        print("按 Ctrl+C 停止程序")

        while sent_count < count:
            try:
                print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] 开始执行第 {sent_count + 1}/{count} 次任务...")

                # 随机选择消息并发送
                message = self.get_random_message()
                print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 选择消息: {message}")
                print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 剩余未发送消息: {len(self.message_pool)} 条")

                success = self.send_message(message)
                if success:
                    sent_count += 1
                    print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 任务完成 ({sent_count}/{count})")
                else:
                    print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 任务失败")
                    # 发送失败的消息放回池中
                    if message in self.used_messages:
                        self.used_messages.remove(message)
                    if message not in self.message_pool:
                        self.message_pool.append(message)

                # 如果还未达到次数，等待60秒
                if sent_count < count:
                    print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 等待下一分钟...")
                    time.sleep(60)

            except KeyboardInterrupt:
                print(f"\n程序已手动停止，共发送 {sent_count} 条消息")
                break
            except Exception as e:
                print(f"程序执行异常: {e}")
                if sent_count < count:
                    time.sleep(60)

        print(f"\n🎉 程序执行完成！共发送 {sent_count} 条消息")
        print(f"已使用消息: {self.used_messages}")


def main():
    """主函数"""
    # 从命令行参数获取次数
    if len(sys.argv) > 1:
        try:
            count = int(sys.argv[1])
        except ValueError:
            print("错误：请提供有效的数字作为参数")
            print("用法: python script.py [次数]")
            return
    else:
        # 如果没有参数，询问用户
        try:
            count = int(input("请输入要执行的次数（每分钟一次）: "))
        except ValueError:
            print("请输入有效的数字")
            return

    if count <= 0:
        print("次数必须大于0")
        return

    # 创建机器人实例并运行
    bot = FishPiBot()
    bot.run(count)


if __name__ == "__main__":
    main()
